Skip to content

use dmabuf option when the ibperf binaries have them configured#235

Open
ahskabir wants to merge 12 commits into
mainfrom
feature/perf_dmabuf
Open

use dmabuf option when the ibperf binaries have them configured#235
ahskabir wants to merge 12 commits into
mainfrom
feature/perf_dmabuf

Conversation

@ahskabir

Copy link
Copy Markdown
Contributor

Motivation

IBPERF test makes use of the binaries for which path is provided in the configuration file. It also has an option to install the ibperf tool and then to run the test. But during the run-time when it prepares the ibperf invocation command(s) it doesn't use the --use_rocm_dmabuf option and the run could be less performant.

Technical Details

A function is added in the ibperf library. This function check to see whether the ibperf binary was configured with --use_rocm_dmabuf. If yes, it will use the flag for invocation, otherwise not.

Test Plan

All ibperf test was run using ibperf binaries configured with --use_rocm_dmabuf and test passed.
All ibperf test was run using ibperf binaries not configured with --use_rocm_dmabuf and test passed.

Test Result

In both the scenarios, all tests passed.

Submission Checklist

ahskabir and others added 7 commits June 22, 2026 13:07
Signed-off-by: Ahsan Kabir <Ahsan.Kabir@amd.com>
* Add CLAUDE.md with codebase guidance for Claude Code

Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>

* Update CLAUDE.md with project structure and full lib/ listing

Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>

* Add TorchTitan training tests, lib, config templates, and guide

- torchtitan_training_lib.py: TorchTitanTrainingJob class for single-node
  and multi-node distributed training using torchrun + TOML config
- Test files: Llama 3.1 8B and 70B x single-node and multi-node
- Config templates: single-node and distributed JSON with model params
  for mi300x and mi325; single-node nnodes hardcoded to 1
- TORCHTITAN_TEST_GUIDE.md: full reference for running and extending tests

Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>

* Rewrite CLAUDE.md as Claude-focused guidance; minor torchtitan cleanup

- CLAUDE.md: restructure for editing-context (Conventions, workload-class
  lifecycle, env vars, "Where to look when..."); drop generic defaults
  already enforced by ruff; remove TORCHTITAN_TEST_GUIDE reference.
- torchtitan_training_lib.py: simplify tt_config to {module}_{model_size};
  use self.master_address in single-node torchrun rdzv_endpoint;
  collapse duplicate single-node docker exec loop.
- Delete TORCHTITAN_TEST_GUIDE.md.

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>

* Remove empty __init__.py from tests/training/torchtitan

Not required for pytest collection (megatron/ and jax/ siblings work
without it) nor for sdist packaging (MANIFEST.in uses recursive-include).

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>

* torchtitan: generated TOML, config-driven root, robust launcher

- Add config-driven TOML generation: use_generated_config=True writes a
  TOML from model_params to {scripts_dir}/run_config.toml; False falls
  back to the canned TOML shipped with TorchTitan (path now includes
  .toml extension).
- Parameterize torchtitan_root (default /workspace/torchtitan); 7 new
  per-model fields (hf_assets_path, converters, dataset, lr,
  warmup_steps, enable_async_tensor_parallel,
  precompute_float8_dynamic_scale_for_fsdp) populate the generated TOML.
- Inline config_file_path into torchrun instead of exporting
  \$CONFIG_FILE: the wrapper-script echo was expanding \$CONFIG_FILE
  against the SSH session env at echo-time, silently overriding our
  export with a stale /tmp path.
- Wrap download + sleep + torchrun chain in nohup sh -c '...' & disown
  with stdio detached so it survives docker exec returning.
- Truncate training.log before download/sleep window so the poller
  doesn't scan stale prior-run output during the launch gap; bump
  pre-poll wait from 80s to 300s to clear download + sleep 200.
- Align with megatron reference: pattern-table-driven regex parsing
  (TRAINING_RESULT_PATTERNS, TRAINING_PROGRESS_PATTERNS_TEMPLATE,
  TRAINING_NAN_PATTERNS) + helpers, configurable hca_id_pattern with
  re.escape per segment, fuller docstrings on lifecycle methods.

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>

* torchtitan configs: default use_generated_config to False

Switch the shipped templates to the canned-TOML path so customers get
the upstream TorchTitan preset out of the box. Customers who want full
JSON-driven config can flip this to "True".

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>

* fmt: auto-format torchtitan_training_lib.py

Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>

* remove unused TorchTitanLlamaTrainingJob alias

Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>

* make fmt changes

* torchtitan: add qwen3_32b tests, sync HF download, log-format fixes

Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>

* adding torchtitan deepseek_16b models test files and config files

* removed CLAUDE.md file

---------

Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
Co-authored-by: Rajesh Thummala <rthummal@amd.com>
Co-authored-by: Rajesh Thummala <rthummal_amdeng>
…o resolve Tb errors

Signed-off-by: Urvashi Tiwari <urtiwari.com>
Signed-off-by: Urvashi Tiwari <urtiwari.com>
Introduces an opt-in nginx reverse proxy layer (docker-compose.nginx.yml)
that terminates TLS on port 443 and proxies to Grafana and Fleet Manager
over the internal Docker network. Required for deployments on public IPs
where Zscaler performs SSL inspection and blocks non-standard ports.

- docker-compose.nginx.yml: compose override adding fleet-nginx container;
  overrides GF_SERVER_ROOT_URL via GRAFANA_ROOT_URL env var; mounts
  /etc/letsencrypt and /var/www/certbot for Let's Encrypt integration
- server/config/nginx/nginx.conf: nginx config with ACME HTTP-01 challenge
  support on port 80, TLS termination on 443, WebSocket proxy headers for
  Grafana live, and /fleet/ path for Fleet Manager API
- server/config/nginx/ssl/.gitkeep: placeholder keeps ssl/ dir in tree;
  certs are gitignored (*.pem, *.key already in .gitignore)
- .env.example: documents three GRAFANA_ROOT_URL deployment tracks:
  private/VPN (no TLS), nip.io + Let's Encrypt (staging/test),
  AMD-issued cert (production)

Validated on chi-metrics-exp-mon (137.220.56.231) with Let's Encrypt cert
for 137.220.56.231.nip.io — clears Zscaler SSL inspection.

Rollback (base stack untouched):
  docker compose -f docker-compose.yml -f docker-compose.nginx.yml rm -sf fleet-nginx

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduces a Go-based SSH connection pool (go-collector) that maintains persistent connections per host, replacing the ephemeral Python parallel-SSH implementations (cvs_parallel_ssh_reliable, host_probe, jump_host_pssh). Adds ssh_manager.py and go_collector.py on the Python side to interface with the new daemon, and updates main.py and the Dockerfile/docker-compose accordingly.

Co-authored-by: Cursor <cursoragent@cursor.com>
Replace Python SSH layer with persistent Go SSH collector
Comment thread cvs/lib/ibperf_lib.py Outdated

try:
# detailed=True gives us exit_code per host
host_results = phdl.exec(cmd, detailed=True, print_console=False)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It assumes a homogeneous cluster — all nodes have the same binary at the same app_path. That's a safe assumption in the ibperf context (the binary path comes from a shared config and is the same for all nodes), and it's consistent with how the rest of the test already treats the cluster.

So we can just use shdl.exec instead of phdl.exec, shdl.exec will test the binary only in the head node(which is sufficent)

Comment thread cvs/lib/ibperf_lib.py Outdated

dmabuf_supported_any = False

for host, result in host_results.items():

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

when shdl is used this whole for loop to set "dmabuf_supported_any " becomes unnecessary.

ahskabir and others added 5 commits July 7, 2026 15:42
* OMPI installation testcase

Signed-off-by: Ahsan Kabir <Ahsan.Kabir@amd.com>

* OMPI build with suppor for optionally building UCX

  - configuration for ompi installation is updated so that user can
    provide information about UCX needs to be built
  - ompi can be built with or without UCX after applying this patch
  - RCCL test was run to test ompi built without ucx and it worked
  - RCCL test was run to test ompi built with ucx and it worked

Signed-off-by: Ahsan Kabir <Ahsan.Kabir@amd.com>

* ompi config file has now "changeme" in two places

Signed-off-by: Ahsan Kabir <Ahsan.Kabir@amd.com>

---------

Signed-off-by: Ahsan Kabir <Ahsan.Kabir@amd.com>
Signed-off-by: Ahsan Kabir <Ahsan.Kabir@amd.com>
Signed-off-by: Ahsan Kabir <Ahsan.Kabir@amd.com>
…e/perf_dmabuf

Signed-off-by: Ahsan Kabir <Ahsan.Kabir@amd.com>
Signed-off-by: Ahsan Kabir <Ahsan.Kabir@amd.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants